package com.mf.generator;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.HashMap;

/**
 * ClassName: CreatedCode
 * Package: com.mf.generator
 * Description:
 *
 * @Author: lmf
 * @Create: 2024/4/24 8:59
 * @Version: 1.0
 */
public class CreatedCode {
    /**
     * 使用FastAutoGenerator自动化生成代码的主函数。
     *
     * @param args 命令行参数（未使用）
     */
    public static void main(String[] args) {

        // 设置数据库相关配置
        String packageName = "com.mf";
        String mysqlName = "root";
        String mysqlPwd = "1234";
        String mysqlUrl = "106.54.55.38:3306/socket_test";
        String tableName = "t_customer,t_warehouse";

        String entityPath = "";
        String mapperPath = "";
        String servicePath = "";
        String controllerPath = "";


        // 定义数据库连接URL
        String url = "jdbc:mysql://"+mysqlUrl+"?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8" +
                "&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true";



        // 设置输出目录相关配置
        String publicPath = "/src/main/";
        String PkgXml = System.getProperty("user.dir")+publicPath+"resources/mapper"+mapperPath;
        String pkgPath = System.getProperty("user.dir")+publicPath+"java";
        String PkgEntityPath = "/templates/entity.java";

        // 开始生成代码
        FastAutoGenerator.create(url, mysqlName, mysqlPwd)
                .globalConfig(builder -> {
                    // 全局配置
                    builder.author("mf") // 设置作者
                            .disableOpenDir() // 禁止自动打开输出目录
//                        .enableSwagger() // 启用Swagger
                            .outputDir(pkgPath); // 指定输出目录
                })
                // 包配置
                .packageConfig(builder -> {
                    // 设置包配置
                    builder.parent(packageName)
                            .entity("entity"+entityPath) // 设置entity包名
                            .mapper("mapper"+mapperPath) // 设置mapper包名
                            .service("service"+servicePath) // 设置service包名
                            .controller("controller"+controllerPath) // 设置controller包名
                            .pathInfo(new HashMap<OutputFile, String>(){{
                                put(OutputFile.xml, PkgXml); // 设置xml输出路径
                            }}); // 设置父包名
                })

                .strategyConfig(builder -> {
                    // 设置策略配置
                    builder
                            .addInclude(tableName) // 设置需要生成的表名
                            .addTablePrefix("sys_", "t_") // 设置过滤表前缀

                            .entityBuilder()
                            .disableSerialVersionUID() // 禁用UUID
                            .enableLombok() // 启用 Lombok 注解
                            .idType(IdType.AUTO)
                            .controllerBuilder()
                            .enableRestStyle()
                    ;
                })

                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker模板引擎
                // 模板配置
                .templateConfig(
                        builder -> builder.entity(PkgEntityPath)
                )
                .execute(); // 执行生成操作
    }
}
